#!/bin/bash
##定义了常用的字体效果及基础功能
##定义字体效果
#红色背景
red_bg='\e[41;33;1m'
#红色字体
red_zt='\e[1;31m'
#绿色背景
green_bg='\033[0;32;1m'
#绿色字体
green_zt='\e[1;32m'
#关闭效果
end='\033[0m'
#字体闪烁
ss='\033[05m'
#消隐
sy='\33[08m'

# 日志文件
log_file=../shell_run.log
##常用语句定义区
#主要用于步骤开始前的信息展现
Entering(){
	echo -e "${green_bg}正在进入...${end}\n${red_zt}${1}...${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]"  >> $log_file
}
#红色字体+绿色字体
red_z_green_z_info(){
	echo -e "${red_zt}${1}:${end}${green_zt}${2}${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]"  >>  $log_file
}
#检测是否输入
input_check(){
    #1参未需要设置的变量值[ $DB_PASS ]
    #2参为这个参数的备注信息[例如:数据库的root密码]
    #3参为一个随机/默认值,例如[ 000000 ]
    #4参为这个变量名,例如 [ DB_PASS ]
    if [[ -z "$1" ]];then
        echo -e "${red_zt}检测到${2}没有输入，已使用默认值[ ${3} ]${end}" | tee -a $log_file
		echo -e "当前时间: [ `date`]"  >>  $log_file
        eval `echo "$4=$3"`
    else
        eval `echo "$4=$1"`
    fi
}
#绿色字体
green_zt(){
	echo -e "${green_zt}${1}${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]" >>  $log_file
}
#红色字体+绿色字体
red_z_green_z(){
	echo -e "${red_zt}${1}${end}${green_zt}${2}${end}${green_zt}${3}${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]"  >>  $log_file
}
#红色字体
red_z(){
	echo -e "${red_zt}${1}${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]" >>  $log_file
}
#红色背景
red_bg(){
	echo -e "${red_bg}${1}${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]"  >>  $log_file
}
#红色字体+红色背景
red_zt_bg(){
	echo -e "${red_zt}${1}${end}${red_bg}${2}${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]"  >>  $log_file
}
#输入函数
input(){
	echo -e "${red_zt}${1}${end}" | tee -a $log_file
	echo -e "当前时间: [ `date`]"  >>  $log_file
	read $2
}
#检测运行结果
chek_status(){
    if [[ "$1" -eq '0' ]];then
        if [[  "$3" -eq 'q' ]];then
            return 0
        else
            red_z_green_z_info "$2" "成功"
        fi
        return 0
    else
        if [[  "$3" == 'q' ]];then
           red_bg "$2"
           exit 1
        fi
        status='true'
        while $status;do
            red_zt_bg "$2" "失败"
            err='n'
            input "是否停止脚本运行[当前脚本PID: $$]\n输入f忽略该提示" "err"
            if [[ "$err" == 'f' ]];then
                status='false'
                if [[ "$status" == 'false' ]];then
                    red_z "已跳过该错误:[${2}失败]"
                else
                    status='true'
                fi
            else
                status=true
            fi
        done
    fi
}
install_status(){
    if [[ -x "$1" ]];then
        red_z_green_z "[ $2 ]" "安装成功"
    else
        red_zt_bg "[ $2 ]" "安装失败"
    fi
}
#关闭防火墙
disable_firealld(){
    systemctl stop firewalld  > /dev/null 2>&1
    systemctl disable firewalld > /dev/null 2>&1
    setenforce 0
	if [[ -f "/etc/selinux/config" ]];then
			sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
	fi
	if [[ -f "/etc/sysconfig/selinux" ]];then
			sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
	fi
}
# 检查用户
check_user(){
    if [[ "$USER" == "$1" || "$UID" == $1 ]];then
        red_z_green_z "用户检测:" "通过"
    else
        red_zt_bg "用户检测:" "失败"
        red_zt "请使用[ $1 ]登录执行此脚本"
        exit 1
    fi
}
#检测网络连接情况
Check_Network(){
    if [[ -n "$1" ]];then
        pings="$1"
    else
        pings='114.114.114.114'
    fi
    red_z_green_z "正在进行网络检测..."
    ping $pings -c 3  > /dev/null
    chek_status "$?" "连接到---> [ $pings ]" "q"
    network_status='ok'
}
#检测和设置当前系统IP

##加载函数
Loading_function(){
	for i in $*;do
		if [[ -f "$i" ]];then
            source $i
            chek_status "$?" "加载功能文件[ $i ]" 'q'
            green_zt "[$i]加载完成"
		else
			red_bg "找不到功能文件[ $i ]"
		fi
	done
    
}
service_installs(){
    for i in $*;do
        red_z_green_z_info "正在安装---->>>>" "[ ${1} ]\t"
        red_z_green_z_info "当前子任务剩余安装数--->" "[ `expr $# - 1` ]"
        red_z_green_z_info "当前脚本进程PID------->" "[ $$ ]\n"
        if [[ "$display" == 'n' || "$display" == 'N' ]];then
            $install $i > /dev/null 2>&1
        else
            $install $i
        fi
        chek_status "$?" "[ ${i} ]安装"
        shift 
    done
}
#服务安装
service_install(){
    cou=`echo -e "$*" | sed 's/ /\n/g'`
    service_installs $cou
}
item='yes'
